package synkey;

import util.MathUtil;

/**
 * 验证一个线程在执行完同步方法后就会释放对象锁
 * 所以如果一个对象的方法都是同步的，那这个对象就是线程安全的
 */
public class TestSynLock {



    public static void main(String[] args) {

        SynLock synLock = new SynLock();

        new Thread(() -> {
            // 执行之后就会释放对象锁
            synLock.setS(100);
            // 加上这个耗时方法能够更容易看出来，不加，也可以
            MathUtil.resolvePrime();
            // 多执行几次，t1就会得到t2设置的500，那么只是对对象的方法加锁就有问题了
            System.out.println("t1 should 100 " + synLock.getS());
        }).start();

        new Thread(() -> {
            synLock.setS(500);
            MathUtil.resolvePrime();
            // System.out.println("t2 lost lock?");
            System.out.println("t2 should 500 " + synLock.getS() );

        }).start();

    }

}
